# 技术架构

![arc](../pic/cfs-arch-ec.png)

CubeFS由 **元数据子系统（Metadata Subsystem）** ，**数据子系统（Data Subsystem）** 和 **资源管理节点（Master）** 以及 **对象网关（Object Subsystem）** 组成，可以通过POSIX/HDFS/S3接口访问存储数据。

- **资源管理节点**：由多个Master节点组成，负责异步处理不同类型的任务，如管理数据分片与元数据分片（包括创建、删除、更新以及一致性检查等），检查数据节点或者元数据节点的健康状态，维护管理卷信息等

::: tip 提示
Master节点可以有多个，节点之间通过Raft算法保证元数据的一致性，并且持久化到RocksDB中。
:::

- **元数据子系统**：由多个Meta Node节点组成，多个元数据分片（Meta Partition）和Raft实例（基于Multi-Raft复制协议）组成，每个元数据分片表示一个Inode范围元数据，其中包含两棵内存B-Tree树：inode BTree与dentry BTree。

::: tip 提示
元数据实例最少需要3个，支持水平扩容。
:::

- **数据子系统**：分为副本子系统和[纠删码](https://en.wikipedia.org/wiki/Erasure_code) 子系统，两种子系统可同时存在，也都可单独存在：
    - 副本子系统由DataNode组成，每个节点管理一组 **数据分片**，多个节点的**数据分片**构成一个副本组；
    - 纠删码子系统（Blobstore）主要由BlobNode模块组成，每个节点管理一组**数据块**，多个节点的**数据块**构成一个纠删码条带。

::: tip 提示
数据节点支持水平扩容。
:::

- **对象子系统**：由对象节点（ObjectNode）组成，提供了兼容标准S3语义的访问协议，可以通过Amazon S3 SDK或者是s3cmd等工具访问存储资源。

- **卷**：逻辑上的概念，由多个元数据和数据分片组成，从客户端的角度看，卷可以被看作是可被容器访问的文件系统实例。从对象存储的角度来看，一个卷对应着一个bucket。一个卷可以在多个容器中挂载，使得文件可以被不同客户端同时访问。
